package designmode;

/**
 * @Author fallrain
 * @Description 设计模式--单例模式
 * @Date 2022/2/11 14:28
 * @Version 1.0
 */
public class SingletonMode05 {
    private static SingletonMode05 singletonMode05;

    private SingletonMode05(){}

    /**
     * 5.懒汉式（线程安全，同步代码块）【不可用】
     * 由于第四种实现方式同步效率太低，所以摒弃同步方法，改为同步产生实例化的的代码块。但是这种同步并不能起到线程同步的作用。
     * 跟第3种实现方式遇到的情形一致，假如一个线程进入了if (singleton == null)判断语句块，还未来得及往下执行，另一个线程也通过了这个判断语句，这时便会产生多个实例。
     * @return
     */
    public static SingletonMode05 getInstance(){
        if (singletonMode05 == null){
            synchronized (SingletonMode05.class){
                singletonMode05 = new SingletonMode05();
            }
        }
        return singletonMode05;
    }
}
